題目:
Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-2^31,2^31-1], then return 0.
Assume the environment does not allow you to store 64-bit integers (signed or unsigned).
給定一數n,回傳其反轉後的結果,但若反轉後該數超出[-2^31,2^31-1]的範圍,則回傳0
這題最麻煩的點在於不能使用[-2^31,2^31-1]範圍外的數
class Solution:
def reverse(self, x: int) -> int:
if x==0: #若為0則直接回傳
return 0
flag=0
if x<0: #紀錄該數是不是負數
x=-x
flag=1
while x%10==0: #去除尾0
x=x//10
x=str(x) #轉字串方便操作
MIN="2147483648" #判斷反轉後是否溢出
MAX="2147483647"
if len(x)==10: #長度10之下的數反轉也不會溢出
if flag: #正負邊界不同
for i in range(10):
if int(x[-i-1])>int(MIN[i]):
return 0
elif int(x[-i-1])<int(MIN[i]):
break
else:
for i in range(10):
if int(x[-i-1])>int(MAX[i]):
return 0
elif int(x[-i-1])<int(MAX[i]):
break
ans=0 #反轉工程
n=1
for i in x:
ans=ans+int(i)*n
n=n*10
if flag: #根據正負回傳
return -ans
else:
return ans
開始前先紀錄該數是否是負數,若是將其轉正方便計算
接著將尾端的0全數去除,因為反轉後的數頭不該有0
再來轉字串末位往上跟最大邊界首位往下比大小
藉此判斷反轉後會不會溢出
若會則直接回傳0
判斷完我們就能安心反轉了
反轉後根據先前紀錄此數的正負回傳
最後執行時間34ms(faster than 92.06%)
那我們下題見